// ==UserScript==
// @name         Intercept Core Data with Timeout (after last request)
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Intercept specific HTTP response, log data to console and send it to a local server. Close page if no new request is intercepted within 3 minutes after last request.
// @author       You
// @match        https://compass.jinritemai.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 本地服务器的地址
    const localServerURL = 'http://localhost:3000/api/core_data'; // 请替换为你的本地服务器地址

    let lastRequestTime = Date.now(); // 记录最后一次请求的时间

    // 函数：关闭页面
    function closePage() {
        console.log('3分钟内没有新请求，页面将被关闭。');
        window.close(); // 关闭页面
    }

    // 设置3分钟后自动关闭页面
    let timeout = setTimeout(closePage, 3 * 60 * 1000); // 初始设置为3分钟

    // 拦截原始的 XMLHttpRequest.open 方法
    const originalXHROpen = XMLHttpRequest.prototype.open;

    XMLHttpRequest.prototype.open = function(method, url, async, user, password) {
        // 这里你可以检查或记录请求的 URL
        if (url.includes('core_data')) {
            // 通过 onload 事件监听响应
            const originalOnLoad = this.onload;
            this.onload = function(event) {
                // 只有响应状态为 200 时，才处理响应数据
                if (this.status === 200) {
                    lastRequestTime = Date.now(); // 更新最后请求的时间
                    clearTimeout(timeout); // 清除之前的定时器
                    timeout = setTimeout(closePage, 3 * 60 * 1000); // 重新设置定时器为3分钟
                    sendDataToServer(JSON.parse(this.responseText));
                }

                // 调用原始 onload 事件处理器
                if (originalOnLoad) {
                    originalOnLoad.call(this, event);
                }
            };
        }

        // 调用原始的 open 方法
        originalXHROpen.apply(this, arguments);
    };

    // 函数：将数据发送到本地服务器
    function sendDataToServer(data) {
        fetch(localServerURL, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(data), // 将响应数据发送到本地服务器
        })
            .then(response => {
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            return response.json();
        })
            .then(result => {
            console.log('Data successfully sent to server:', result);
        })
            .catch(error => {
            console.error('Error sending data to server:', error);
        });
    }

})();
